/**
 * Copyright (c) iwindplus Technologies Co., Ltd.2024-2030, All rights reserved.
 */

package com.iwindplus.boot.web.manager;

import java.util.List;
import java.util.Map;
import org.springframework.web.multipart.MultipartFile;

/**
 * HttpClient远程调用助手.
 *
 * @author zengdegui
 * @since 2025/04/22 23:45
 */
public interface HttpClientHandler {

    /**
     * get同步请求（参数拼接）.
     *
     * @param url    路径（必填）
     * @param header 请求头（可选）
     * @param param  参数（可选）
     * @return String
     */
    String httpGet(String url, Map<String, String> header, Map<String, Object> param);

    /**
     * post同步请求（json）.
     *
     * @param url    路径（必填）
     * @param header 请求头（可选）
     * @param json   参数（必填）
     * @return String
     */
    String httpPostByJson(String url, Map<String, String> header, String json);

    /**
     * post同步请求（FormBody表单）.
     *
     * @param url    路径（必填）
     * @param header 请求头（可选）
     * @param param  参数（可选）
     * @return String
     */
    String httpPostByForm(String url, Map<String, String> header, Map<String, Object> param);

    /**
     * post同步请求（MultipartBody表单）.
     *
     * @param url    路径（必填）
     * @param header 请求头（可选）
     * @param param  参数（可选）
     * @param files  文件集合（可选）
     * @return String
     */
    String httpPostByMultipart(String url, Map<String, String> header, Map<String, Object> param, List<MultipartFile> files);

    /**
     * put同步请求（json）.
     *
     * @param url    路径（必填）
     * @param header 请求头（可选）
     * @param json   参数（必填）
     * @return String
     */
    String httpPutByJson(String url, Map<String, String> header, String json);

    /**
     * put同步请求（FormBody表单）.
     *
     * @param url    路径（必填）
     * @param header 请求头（可选）
     * @param param  参数（可选）
     * @return String
     */
    String httpPutByForm(String url, Map<String, String> header, Map<String, Object> param);

    /**
     * put同步请求（MultipartBody表单）.
     *
     * @param url    路径（必填）
     * @param header 请求头（可选）
     * @param param  参数（可选）
     * @param files  文件集合（可选）
     * @return String
     */
    String httpPutByMultipart(String url, Map<String, String> header, Map<String, Object> param, List<MultipartFile> files);

    /**
     * delete同步请求（参数拼接）.
     *
     * @param url    路径（必填）
     * @param header 请求头（可选）
     * @param param  参数（可选）
     * @return String
     */
    String httpDelete(String url, Map<String, String> header, Map<String, Object> param);

    /**
     * delete同步请求（json）.
     *
     * @param url    路径（必填）
     * @param header 请求头（可选）
     * @param json   参数（必填）
     * @return String
     */
    String httpDeleteByJson(String url, Map<String, String> header, String json);

    /**
     * delete同步请求（FormBody表单）.
     *
     * @param url    路径（必填）
     * @param header 请求头（可选）
     * @param param  参数（可选）
     * @return String
     */
    String httpDeleteByForm(String url, Map<String, String> header, Map<String, Object> param);
}
